﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YasharEl.Infrastructure.ApplicationModel.Bootstrap.Extensibility;
using YasharEl.Infrastructure.ApplicationModel.Bootstrap.Execution;

namespace YasharEl.Infrastructure.ApplicationModel.Bootstrap.Reporting
{
    /// <summary>
    /// Marks the implementor as reporting context.
    /// </summary>
    public interface IReportingContext : 
        IRunExecutionContextFactory, 
        IShutdownExecutionContextFactory, 
        IConfigureExecutionContextFactory,
        IBootstrappingExtensionContextFactory
    {
        /// <summary>
        /// Gets information about the run phase of the bootstrapping process.
        /// </summary>
        IExecutionContext Run { get; }

        /// <summary>
        /// Gets information about the shutdown phase of the bootstrapping process.
        /// </summary>
        IExecutionContext Shutdown { get; }

        /// <summary>
        /// Gets information about the configuration phase of the bootstrapping process.
        /// </summary>
        IExecutionContext Configure { get; }

        /// <summary>
        /// Gets information about all extensions which participate in the bootstrapping process.
        /// </summary>
        IEnumerable<IBootstrappingExtensionContext> Extensions { get; }
    }
}
